#!/usr/bin/env python3
"""
fonts-rpm-macros MCP Server

面向 fonts-rpm-macros 软件的 MCP Server，提供字体配置相关的命令行工具封装。

MCP tools 列表：
1. fc_weight_tool - 执行 fc-weight 命令，用于计算字体权重
   参数：show_help (bool) - 是否显示帮助信息，threshold (int) - 阈值参数，font_size (int) - 字体大小参数
   返回：统一的命令执行结果 JSON

2. gen_fontconf_tool - 执行 gen-fontconf 命令，用于生成字体配置文件
   参数：show_help (bool) - 是否显示帮助信息，xml_file (str) - XML 输入文件，yaml_file (str) - YAML 输入文件，
        lang (str) - 语言代码，mode (str) - 输出模式，write_conf (bool) - 是否写入配置文件，
        output_file (str) - 输出文件路径，force (bool) - 是否强制覆盖
   返回：统一的命令执行结果 JSON
"""

from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json
from typing import Optional

mcp = FastMCP("Fonts RPM Macros MCP Server")

@mcp.tool()
def fc_weight_tool(show_help: bool = False, threshold: Optional[int] = None, font_size: Optional[int] = None) -> dict:
    """
    执行 fc-weight 命令，用于计算字体权重或显示帮助信息
    
    参数:
        show_help: 是否显示帮助信息（默认False）
        threshold: 阈值参数，用于计算权重
        font_size: 字体大小参数，用于计算权重
    
    返回:
        JSON结构: {
            "success": bool,      # 命令是否成功执行
            "command": str,       # 实际执行的命令
            "exit_code": int,     # 命令退出码
            "stdout": str,        # 标准输出内容
            "stderr": str         # 标准错误内容
        }
    """
    try:
        if show_help:
            cmd = ["fc-weight", "-h"]
        elif threshold is not None:
            cmd = ["fc-weight", "-t", str(threshold)]
        elif font_size is not None:
            cmd = ["fc-weight", "-f", str(font_size)]
        else:
            cmd = ["fc-weight", "-h"]  # 默认显示帮助
        
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
        
        return {
            "success": result.returncode == 0,
            "command": " ".join(cmd),
            "exit_code": result.returncode,
            "stdout": result.stdout,
            "stderr": result.stderr
        }
    except Exception as e:
        return {
            "success": False,
            "command": " ".join(cmd) if 'cmd' in locals() else "unknown",
            "exit_code": -1,
            "stdout": "",
            "stderr": str(e)
        }

@mcp.tool()
def gen_fontconf_tool(
    show_help: bool = False,
    xml_file: Optional[str] = None,
    yaml_file: Optional[str] = None,
    lang: Optional[str] = None,
    mode: Optional[str] = None,
    write_conf: bool = False,
    output_file: Optional[str] = None,
    force: bool = False
) -> dict:
    """
    执行 gen-fontconf 命令，用于生成字体配置文件
    
    参数:
        show_help: 是否显示帮助信息（默认False）
        xml_file: XML 输入文件路径
        yaml_file: YAML 输入文件路径
        lang: 语言代码（如：123456）
        mode: 输出模式（如：xml）
        write_conf: 是否写入配置文件（默认False）
        output_file: 输出文件路径
        force: 是否强制覆盖（默认False）
    
    返回:
        JSON结构: {
            "success": bool,      # 命令是否成功执行
            "command": str,       # 实际执行的命令
            "exit_code": int,     # 命令退出码
            "stdout": str,        # 标准输出内容
            "stderr": str         # 标准错误内容
        }
    """
    try:
        cmd = ["gen-fontconf"]
        
        if show_help:
            cmd.append("-h")
        elif xml_file:
            cmd.extend(["-x", xml_file])
        elif yaml_file:
            cmd.extend(["-y", yaml_file])
            if lang:
                cmd.extend(["-l", lang])
            if mode:
                cmd.extend(["-m", mode])
            if write_conf:
                cmd.append("-w")
            if force:
                cmd.append("-f")
            if output_file:
                cmd.extend(["-o", output_file])
        else:
            cmd.append("-h")  # 默认显示帮助
        
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
        
        return {
            "success": result.returncode == 0,
            "command": " ".join(cmd),
            "exit_code": result.returncode,
            "stdout": result.stdout,
            "stderr": result.stderr
        }
    except Exception as e:
        return {
            "success": False,
            "command": " ".join(cmd) if 'cmd' in locals() else "unknown",
            "exit_code": -1,
            "stdout": "",
            "stderr": str(e)
        }

if __name__ == "__main__":
    mcp.run()